package jdk8.lambda;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer;
import java.util.function.Consumer;

public class ConsumerDemo {

	public static void main(String[] args) {
		//消费型接口 【使用此接口的调用者提供数据】
		Consumer<String> c1 = new Consumer<String>() {
			
			/***
			 * 此方法中代码的目的：
			 * 	就是消费用户传进来的数据。
			 */
			@Override
			public void accept(String t) {
				System.out.println(t);
			}
		};
		//
		c1.accept("张三");
		//
		System.out.println("---------------- 使用Lambda表达式 -------------------");
		Consumer<String> c2 = (a) -> System.out.println(a);
		c2.accept("李四");
		
		//
		List<Integer> intList = Arrays.asList(1,4,5,6,3,43,564,56456,4,23);
		//
		intList.forEach(new Consumer<Integer>() {
			@Override
			public void accept(Integer t) {
				System.out.println(t);
			}
		});
		//
		System.out.println("---------------- 使用Lambda表达式 -------------------");
		intList.forEach(t -> System.out.println(t));
		System.out.println("---------------- 使用方法引用 -------------------");
		intList.forEach(System.out::println);
		
		System.out.println("---------------- 使用 andThan 方法-------------------");
		String[] strArr = {"jack,18","ann,19","solo,21","smith,17"};
		//
		printStrArr(strArr, (t) -> System.out.print(t.split(",")[0] + " => "),
						(t) -> System.out.println(t.split(",")[1]));
		
		System.out.println("---------------- 使用BiConsumer来迭代Map -------------------");
		Map<Integer, String> map = new HashMap<>();
		map.put(1, "SPRING");
		map.put(2, "SUMMER");
		map.put(3, "AUTUMN");
		map.put(4, "WINTER");
		//在JDK8中，map接口提供了默认方法 forEach
		//map.forEach(new BiConsumer<Integer, String>() {
			//@Override
			//public void accept(Integer t, String u) {
				//System.out.printf("%s -> %s\n",t, u);
		//	}
		//});
		map.forEach((k,v) -> System.out.printf("%s -> %s\n", k, v));
	}
	
	public static void printStrArr(String[] arr, Consumer<String> c1, Consumer<String> c2) {
		Arrays.asList(arr).forEach(c1.andThen(c2));
	}
}



